#include <stdio.h>   
#include <pthread.h>
  
/*//线程的取消
void* func(void* agr)
{
	printf("线程创建成功\n");
   
    //取消点
	while(1)
	{
		sleep(1);
	}
    pthread_exit("线程结束");
}  
int main()
{
    int ret;
    pthread_t tid;
    void* retv;
    //创建线程
    pthread_create(&tid, NULL, func, NULL);
    sleep(5);

    //取消线程
    pthread_cancel(tid);

	//线程回收
    pthread_join(tid, &retv);
	//printf("retv= %s", (char*)retv);  线程取消了join就收不到

	//先不让主进程结束
	while(1)
	{
		sleep(1);
	}
    return 0;
}*/

//=============================================
//2.线程取消

void* fun(void* agr)
{
	printf("线程创建成功\n");

	//pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL);
	while()
	{
		sleep(10);
		pthread_testcancel();
	}
	pthread_exit("线程退出");
}

int main()
{
	pthread_t tid;
	int ret;
	void* retv;
	//创建线程
	ret = pthread_create(&tid, NULL, fun, NULL);
	sleep(1);

	//取消线程
	pthread_cancel(tid);

	//线程回收
	pthread_join(tid, &retv);
    printf("retv= %s", (char*)retv);

	/*//不结束主线程
	while(1)
	{
		sleep(1);
	}*/


	return 0;
}




























